package application;


import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


import javax.media.opengl.GL;
import javax.swing.JButton;
import javax.swing.JFrame;

import scene.Couleur;
import scene.Dessin;
import scene.VisualObject;
import scene.Pyramidion;
import scene.Scene3DUtilisateur;
import tools.Rdm;


public class Exemple extends Scene3DUtilisateur {



	int SCENE_PYRAMIDION;

	public static float coord[][]=new float[30000][3];
	public static float coord2[][]=new float[30000][3];

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		for(int i=0; i<30000; i++)
		{
			int signe=Rdm.randomBoolean()?1:-1;
			coord[i][0]=signe*Rdm.randomFloat()*10;
			coord2[i][0]=signe*Rdm.randomFloat()*10;
			signe=Rdm.randomBoolean()?1:-1;
			coord[i][1]=signe*Rdm.randomFloat()*10;
			coord2[i][0]=signe*Rdm.randomFloat()*10;
			signe=Rdm.randomBoolean()?1:-1;
			coord[i][2]=signe*Rdm.randomFloat()*10;
			coord2[i][0]=signe*Rdm.randomFloat()*10;
		}



		final Exemple visu = new Exemple();

		visu.positionnerCamera(1, 10, 10);

		JFrame frame = new JFrame();
		JButton btHitMe = new JButton("Hit me!");
		frame.add(btHitMe,BorderLayout.SOUTH);
		frame.add(visu.getJPanel(),BorderLayout.CENTER);





 				new Thread(new Runnable() {
 					public void run() {
 						try {
 							while(true)
 							{
 								//System.out.println(visu.getSelectedVObject());
 							}


						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}

 					}
 				}).start();




                                
		frame.setSize(new Dimension(600,600));
		frame.setVisible(true);
		frame.setLocationRelativeTo(null);
 		/**
 		 * Le code qui suit permet de g�rer la fermeture
 		 * du programme par l'utilisateur
 		 */
 		frame.addWindowListener(new WindowAdapter() {



 			public void windowClosing(WindowEvent e) {
 				/**
 				 * Nous cr�ons un nouveau thread autre
 				 * que la queue d'�venements AWT
 				 * pour permettre d'arr�ter l'Animator avant
 				 * de quitter compl�tement
 				 */
 				new Thread(new Runnable() {
 					public void run() {

 						System.exit(0);
 					}
 				}).start();
 			}


			});

 		Pyramidion pyramidion[] = new Pyramidion[2000];

		/**
		 * afficher x fois le m�me objet
		 */
		for(int i=0; i< 200; i++)
		{

	 		pyramidion[i] = new Pyramidion(coord[i][0],coord[i][1],coord[i][2]);
	 		pyramidion[i].setInformation("ceci est un essai - objet n�"+(i+1));
		}



	}



	public void afficherDansMaScene3D(GL gl)
	{

		Dessin.drawSphere(gl, 10, 0.5, 0, 0.25, Couleur.GREEN, 10,true);
//		/**
//		 * afficher une sph�re pleine rouge
//		 */
		//gl.glPushName(-23);
		Dessin.drawSphere(gl, 0.5, 0.5, 0, 0.25, Couleur.RED, 10, true);
		//gl.glPopName();
//
		/**
		 * afficher une succession de 255 rectangles 3D en tire-bouchon
		 */
		//for(float i=0;i<1;i++)
		//Dessin.drawRect3D(gl,-1+i*0.01, 0.5, -1,0.01,0.5,0.2,0,0,0,i*2,0,0,new Couleur(i/255f,0.9f,0.9f));

	}


    public void initialiserMesDisplayLists(GL gl)
    {




    	/**
    	 * d�finition d'une liste pour
    	 */
        SCENE_PYRAMIDION = gl.glGenLists(1);
        gl.glNewList(SCENE_PYRAMIDION, GL.GL_COMPILE);
        gl.glPushMatrix();
        // CORRIGER PLAN 2D
        gl.glPopMatrix();
		for(int i=0; i< 30000; i++)
		{
			gl.glPushMatrix();


	        Dessin.drawPyramidion(gl,coord[i][0],coord[i][1],coord[i][2],0.03,0.05,0.02,Couleur.BLUE,
					Couleur.GREEN, Couleur.RED);

			gl.glPopMatrix();
		}
        gl.glEndList();


    }



}
